################################################################################ 
#
# The distribution of hate speech and its implications for content moderation
# PSRM - Replication package
# Table E12
#
################################################################################ 



################################################################################ 
#  LIBRARIES
################################################################################ 

library(dplyr)
library(readr)
library(gtools)
library(estimatr)

rm(list = setdiff(ls(), ls(pattern = "^wd|^setsave$")))

################################################################################ 
#   DATA AND FOLDER
################################################################################ 

# read
data = read.csv(paste0(wd_data_processed, '/for_analysis/clean_for_analysis.csv'))
lassodata = read_rds(paste0(wd_data_processed, '/for_analysis/data_lasso.RDS'))

# drop attrited users
data = data[which(data$attrition==0 & data$not_auth_sofar==0 & data$suspended_sofar==0 & data$protected_sofar==0),]


################################################################################ 
#   VARIABLES as in the PAP
################################################################################

outvars = c('anchor_deleted_12h', 'no_hate_tweets_post_85', 'hate_rate_85', 'post_tweets_h_avg')
outvars_name = c('Hate Tweet Deleted <12h', '# Hate Tweets', 'Share of daily hate', 'Probability of Hate Speech') 

treatments = c('alert', 'consequences', 'empathy')
treatments_lab = c( 'Alerting of Hate Speech', 'Warning of Consequences', 'Empathy')

# Extract controls 
ctrs = read.csv(paste0(wd_res, "/tables/tabE11.csv"))
ctrs = ctrs[c('yvar', 'treat', 'controls')]

################################################################################ 
#   Scale variables
################################################################################ 

data[c(outvars)] = lapply(data[c(outvars)], scale)
lassodata = as.data.frame(lapply(lassodata[,2:ncol(lassodata)], scale))

################################################################################
# create heterogeneity
################################################################################

data$hate_pre = data$no_hate_tweets_pre   # both variables refer to the 30 days before intervention
data$hate_pre[data$no_tweets_pre==0] = 0  # 3 users did not post anything

groups = c(1, 2)
data$group = quantcut(data$hate_pre, q = 2, na.rm = TRUE, labels=groups) # Groups
data$high_hate = ifelse(data$group==2, 1, 0) # Dummy variable

################################################################################ 
#   Functions for running conditional and unconditional regressions
################################################################################ 

runregression = function(treatvar){
  MODELS = list()
  data$treated = ifelse(data$treat_aggregate==treatvar, 1, ifelse(data$treat_aggregate=="control", 0, NA))
  
  for (var in outvars) {
    formula = as.formula(paste(var, "~ treated * high_hate"))
    MODELS[[var]] = lm_robust(formula, data = data, se_type = "HC3")
  }
  return(MODELS)
}


################################################################################ 
#   Run unconditional regressions
################################################################################ 

MODalert = runregression('alert')
MODconsequences = runregression('consequences')
MODempathy = runregression('empathy')

modelsummary::modelsummary(MODalert, stars = T)
modelsummary::modelsummary(MODconsequences, stars = T)
modelsummary::modelsummary(MODempathy, stars = T)

################################################################################ 
#   Save
################################################################################ 


modelsummary::modelsummary(
  MODalert,
  stars=c('*' = .1, '**' = .05, '***' = .01),
  coef_map = c("treated", "high_hate", "treated:high_hate"),
  output = paste0(wd_res, "/tables/tabE12_alert.tex")
)

modelsummary::modelsummary(
  MODconsequences,
  stars=c('*' = .1, '**' = .05, '***' = .01),
  coef_map = c("treated", "high_hate", "treated:high_hate"),
  output = paste0(wd_res, "/tables/tabE12_consequences.tex")
)

modelsummary::modelsummary(
  MODempathy,
  stars=c('*' = .1, '**' = .05, '***' = .01),
  coef_map = c("treated", "high_hate", "treated:high_hate"),
  output = paste0(wd_res, "/tables/tabE12_empathy.tex")
)

cat("\n====================\n")
cat("Saved Table E12")
cat("\n====================\n")
